home *** CD-ROM | disk | FTP | other *** search
/ Aminet 15 / Aminet 15 - Nov 1996.iso / Aminet / dev / c / c_os3_dt402.lha / c_dt / dt_source / StartUp.c < prev    next >
C/C++ Source or Header  |  1996-09-05  |  4KB  |  170 lines

  1. /*
  2. **      $VER: StartUp.c 40.2 (5.9.96)
  3. **
  4. **      Library startup-code and function table definition
  5. **
  6. **      (C) Copyright 1996 Andreas R. Kleinert
  7. **      All Rights Reserved.
  8. */
  9.  
  10. #include <exec/types.h>
  11. #include <exec/memory.h>
  12. #include <exec/libraries.h>
  13. #include <exec/execbase.h>
  14. #include <exec/resident.h>
  15. #include <exec/initializers.h>
  16.  
  17. #include <proto/exec.h>
  18.  
  19. #include <class/classbase.h>
  20. #include "libfuncs.h"
  21.  
  22.  
  23. extern ULONG __saveds __stdargs L_OpenLibs(void);
  24. extern void  __saveds __stdargs L_CloseLibs(void);
  25.  
  26.  
  27. struct ClassBase * __saveds __asm InitLib( register __a6 struct ExecBase      *sysbase,
  28.                                              register __a0 struct SegList       *seglist,
  29.                                              register __d0 struct ClassBase *exb);
  30.  
  31. struct ClassBase * __saveds __asm OpenLib( register __a6 struct ClassBase *ClassBase);
  32. struct SegList * __saveds __asm CloseLib( register __a6 struct ClassBase *ClassBase);
  33. struct SegList * __saveds __asm ExpungeLib( register __a6 struct ClassBase *exb);
  34. ULONG __saveds __asm ExtFuncLib(void);
  35.  
  36.  
  37. ULONG __saveds __asm LibStart(void)
  38. {
  39.  return(0);
  40. }
  41.  
  42. extern APTR FuncTab [];
  43. extern struct MyDataInit DataTab;
  44.  
  45. struct InitTable
  46. {
  47.  ULONG              LibBaseSize;
  48.  APTR              *FunctionTable;
  49.  struct MyDataInit *DataTable;
  50.  APTR               InitLibTable;
  51. } InitTab =
  52. {
  53.  sizeof(struct ClassBase),
  54.  &FuncTab[0],
  55.  &DataTab,
  56.  InitLib
  57. };
  58.  
  59. APTR FuncTab [] =
  60. {
  61.  OpenLib,
  62.  CloseLib,
  63.  ExpungeLib,
  64.  ExtFuncLib,
  65.  
  66.  ObtainPicClass,
  67.  
  68.  (APTR) ((LONG)-1)
  69. };
  70.  
  71.  
  72. extern struct ClassBase *ClassBase;
  73.  
  74.  
  75. struct ClassBase * __saveds __asm InitLib( register __a6 struct ExecBase      *sysbase,
  76.                                              register __a0 struct SegList       *seglist,
  77.                                              register __d0 struct ClassBase *exb)
  78. {
  79.  ClassBase = exb;
  80.  
  81.  ClassBase->cb_SysBase = sysbase;
  82.  ClassBase->cb_SegList = seglist;
  83.  
  84.  if(L_OpenLibs()) return(ClassBase);
  85.  
  86.  L_CloseLibs();
  87.  
  88.  return(NULL);
  89. }
  90.  
  91. struct ClassBase * __saveds __asm OpenLib( register __a6 struct ClassBase *ClassBase)
  92. {
  93.  ClassBase->cb_LibNode.lib_OpenCnt++;
  94.  
  95.  ClassBase->cb_LibNode.lib_Flags &= ~LIBF_DELEXP;
  96.  
  97.  return(ClassBase);
  98. }
  99.  
  100. struct SegList * __saveds __asm CloseLib( register __a6 struct ClassBase *ClassBase)
  101. {
  102.  ClassBase->cb_LibNode.lib_OpenCnt--;
  103.  
  104.  if(!ClassBase->cb_LibNode.lib_OpenCnt)
  105.   {
  106.    if(ClassBase->cb_LibNode.lib_Flags & LIBF_DELEXP)
  107.     {
  108.      return( ExpungeLib(ClassBase) );
  109.     }
  110.   }
  111.  
  112.  return(NULL);
  113. }
  114.  
  115. struct SegList * __saveds __asm ExpungeLib( register __a6 struct ClassBase *exb)
  116. {
  117.  struct ClassBase *ClassBase = exb;
  118.  struct SegList       *seglist;
  119.  
  120.  if(!ClassBase->cb_LibNode.lib_OpenCnt)
  121.   {
  122.    ULONG negsize, possize, fullsize;
  123.    UBYTE *negptr = (UBYTE *) ClassBase;
  124.  
  125.    seglist = ClassBase->cb_SegList;
  126.  
  127.    Remove(ClassBase);
  128.  
  129.    L_CloseLibs();
  130.  
  131.    negsize  = ClassBase->cb_LibNode.lib_NegSize;
  132.    possize  = ClassBase->cb_LibNode.lib_PosSize;
  133.    fullsize = negsize + possize;
  134.    negptr  -= negsize;
  135.  
  136.    FreeMem(negptr, fullsize);
  137.  
  138.    return(seglist);
  139.   }
  140.   
  141.  ClassBase->cb_LibNode.lib_Flags |= LIBF_DELEXP;
  142.  
  143.  return(NULL);
  144. }
  145.  
  146. ULONG __saveds __asm ExtFuncLib(void)
  147. {
  148.  return(NULL);
  149. }
  150.  
  151. struct ClassBase *ClassBase = NULL;
  152.  
  153.  
  154. /* for SAS/C's sc.lib only */
  155.  
  156. ULONG XCEXIT       = NULL;
  157. ULONG _XCEXIT      = NULL;
  158. ULONG ONBREAK      = NULL;
  159. ULONG _ONBREAK     = NULL;
  160. ULONG base         = NULL;
  161. ULONG _base        = NULL;
  162. ULONG ProgramName  = NULL;
  163. ULONG _ProgramName = NULL;
  164. ULONG StackPtr     = NULL;
  165. ULONG _StackPtr    = NULL;
  166. ULONG oserr        = NULL;
  167. ULONG _oserr       = NULL;
  168. ULONG OSERR        = NULL;
  169. ULONG _OSERR       = NULL;
  170.